<!doctype html  >
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>async结合await发送AJAX请求</title>
</head>
<style>
    body {
        height: 100vh;
        background-color: gray;
        display: flex;
        justify-content: center;
        align-items: center;
        flex-flow: column;
    }

    #box1 {
        width: 300px;
        height: 300px;
        background-color: black;
        color: yellow;
        display: flex;
        justify-content: center;
        align-items: center;
        text-align: center;
    }

    button {
        margin-top: 20px;
        background-color: skyblue;
        padding: 10px;
        width: 100px;
        border-radius: 3px;
        border: none;
        font-family: '华文行楷';
        font-size: 16px;
        transition: all 0.2s linear;
    }

    button:hover {
        background-color: blue;
        color: white;
        transform: scale(1.05);
    }
</style>
<body>
<div id="box1"></div>
<button>确认</button>
<script>
    // AJAX作用：
    // * 异步的 JS 和 XML
    // * 通过AJAX可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据(网页内容发生更改不刷新网页)
    const btn = document.getElementsByTagName('button')[0]
    const box = document.getElementsByTagName('div')[0]

    function sendAJAX(url) {
        return new Promise((resolve, reject) => {
            btn.addEventListener('click', () => {
                // 1.创建对象
                let xhr = new XMLHttpRequest();
                // 2.初始化  设置请求方法和url
                xhr.open('GET', url + '/?username=admin&password=admin');
                // 3.发送
                xhr.send();
                // 4.事件绑定，处理服务端返回的结果
                // onreadystatechange拆分解释：
                //    on ---- when 当····时候
                //    readystate ---- 是xhr对象中的属性，表示状态 0 1 2 3 4(1 -- open方法提交完毕、2 -- send方法提交完毕、3 -- 服务端返回部分的结果、4 -- 服务端返回的全部结果)
                //    change ---- 在改变的时候触发
                xhr.onreadystatechange = () => {
                    //如果服务端返回了所以结果
                    if (xhr.readyState === 4) {
                        //如果响应状态码为200-300
                        //      2XX -- 成功
                        if (xhr.status >= 200 && xhr.status < 300) {
                            // 处理结果 响应行 响应头 空行 响应体
                            // console.log(xhr.status)//响应状态码
                            // console.log(xhr.statusText)//状态字符串
                            // console.log(xhr.getAllResponseHeaders())//所有响应头
                            // console.log(xhr.response)//响应体
                            resolve(xhr.response)
                        } else {
                            reject(xhr.status)
                        }
                    }
                }


            })
        })
    }

    // 1. 方法测试
    // sendAJAX('http://127.0.0.1:9000').then(value => {
    //     box.innerHTML = value
    // }).catch(err => {
    //     console.log(err)
    // })

    // 2. async结合await 测试
    async function test() {
        // 发送AJAX请求
        box.innerHTML=await sendAJAX('http://127.0.0.1:9000')
    }
    test()
</script>
</body>
</html>